AWS Config Rulesのマネージドルール一覧と詳細をぶっこ抜くスクリプト書いた
こんにちは、臼田です。
皆さん、スクリプト書いてますか?(挨拶
AWS Config Rulesは非常に楽しい機能です。AWSのリソースが設定変更されたときに、コンプライアンス条件に満たなければアラートを出したり、自動で修復したりできます。下記がわかりやすいです。
そんなConfig Rulesですが、ルールは2種類あって、AWSが提供するマネージドルールとユーザがLambdaで実装するカスタムルールがあります。マネージドルールは現状で100個以上もあり、すぐに使い始められるのでこれを活用しない手はありません。
しかしながら、たくさんありすぎてどれがどんなものなのかが分かりづらいです。オリジナルの情報は下記にあります。
AWS Config マネージドルールのリスト - AWS Config
それぞれ詳細ページにアクセスすれば詳細な内容がわかるので、スクレイピングするスクリプトを書きました。
スクリプト
Python 3.6で動かしています。BeautifulSoup
を利用しているので事前にpip install
してください。
import re import csv import requests from bs4 import BeautifulSoup re_delete_indent = re.compile(r'\n +') base_url = "https://docs.aws.amazon.com/ja_jp/config/latest/developerguide/" target_url = "https://docs.aws.amazon.com/ja_jp/config/latest/developerguide/managed-rules-by-aws-config.html" r = requests.get(target_url) r.encoding = 'utf-8' soup = BeautifulSoup(r.text, 'lxml') # delete pankukzu list soup.find(id="main-col-body").find("table").extract() # get config rules child pages link_list = soup.find(id="main-col-body").find_all("a") rules = [] for child in link_list: child_url = base_url + child.get('href') r2 = requests.get(child_url) r2.encoding = 'utf-8' soup2 = BeautifulSoup(r2.text, 'lxml') detail = soup2.find(id="main-col-body").p.text.strip() # delete indent detail = re_delete_indent.sub(' ', detail) rules.append({'rule_name': soup2.h1.text, 'rule_detail': detail}) file_name = "config_rules_list.csv" with open(file_name, 'w') as f: writer = csv.DictWriter(f, ["rule_name", "rule_detail"]) writer.writeheader() writer.writerows(rules) print('success!')
実行するとルール名とルールの詳細のcsvが出来上がります。
まとめ
ちょっとしたスクリプトですがせっかくなので共有しました。
スクレイピングはちょっと面倒なので誰かの参考になれば幸いです。